0x000 概述
反射
说起来和上一章节的代理
基本一样,只是使用的方式不同,设计理念也不同。
反射
提供了一系列的静态函数,可以使用Reflect.function_name(...prams)
调用,这一系列的方法和代理
的处理器对象
方法一致
0x001 apply
-
语法
Reflect.apply(target, thisArgument, argumentsList)
-
参数:
-
target
:目标 -
thisArgument
:调用的上下文 -
argumentList
:参数列表
-
-
-
栗子
function sayHelloTo(name, age){ console.log(`hello ${name}, i am ${this.name}, ${age} years old now`) } let obj={ name: 'jack' } Reflect.apply(sayHelloTo, obj, ['jack', 23]) // hello jack, i am jack, 23 years old now
0x002 construct
-
语法
Reflect.construct(target, argumentsList[, newTarget])
-
target
:目标 -
argumentsList
:参数列表 -
newTarget
:新的目标
-
-
栗子
function Person(name){ console.log(`Person ${name}`) } let obj={age:23} Reflect.construct(Person,['jack']) // Person jack
0x003 getOwnPropertyDescriptor
-
语法
Reflect.getOwnPropertyDescriptor(target, propKey)
-
target
:目标 -
propKey
:属性值
-
-
栗子
let obj={name:'jack'} Reflect.getOwnPropertyDescriptor(obj, 'name') // {value: "jack", writable: true, enumerable: true, configurable: true}
0x004 defineProperty
-
语法
Reflect.defineProperty(target, propertyKey, attributes)
-
target
:目标 -
propertyKey
:属性名 -
attributes
:属性描述
-
-
栗子
let obj={} Reflect.defineProperty(obj,'name',{value:'jack'}) console.log(obj) // {name:'jack'}
0x005 deleteProperty
-
语法
Reflect.deleteProperty(target, propertyKey)
-
target
:目标 -
propertyKey
:属性名
-
-
栗子
let obj={name:'jack'} Reflect.deleteProperty(obj, 'name') // true
0x006 ownKeys
-
语法
Reflect.ownKeys(target)
-
target
:目标
-
-
栗子
Reflect.ownKeys({name:'jack'}) // ["name"]
0x007 has
-
语法
Reflect.has(target, propertyKey)
-
target
:目标 -
propertyKey
:属性名
-
-
栗子
Reflect.has({name:'jack'},'name') // true Reflect.has({name:'jack'},'age') // false
0x008 get
-
语法
Reflect.get(target, propertyKey[, receiver])
-
target
:目标 -
propertyKey
:属性名 -
receiver
:接收者
-
-
栗子
let obj={name:'jack'} Reflect.get(obj, 'name') // "jack"
0x009 preventExtensions
-
语法
Reflect.preventExtensions(target)
-
target
:目标
-
-
栗子
Reflect.ownKeys({name:'jack',age:'23'}) // (2) ["name", "age"]
0x009 isExtensible
-
语法
Reflect.isExtensible(target)
-
target
:目标
-
-
栗子
Reflect.isExtensible({}) // true Reflect.isExtensible(Object.seal({})) // false Reflect.isExtensible(Object.freeze({})) // false let obj=Reflect.preventExtensions({}) Reflect.isExtensible(obj) // false
0x011 preventExtensions
-
语法
Reflect.preventExtensions(target)
-
target
:目标
-
-
栗子
Reflect.ownKeys({name:'jack',age:'23'}) // (2) ["name", "age"]
0x012 setPrototypeOf
-
语法
Reflect.setPrototypeOf(target, prototype)
-
target
:目标 -
prototype
:要设置的 prototype
-
-
栗子
Reflect.setPrototypeOf(obj, Array) Reflect.getPrototypeOf(obj) // ƒ Array() { [native code] }
0x013 getPrototypeOf
-
语法
Reflect.getPrototypeOf(target)
-
target
:目标
-
-
栗子
Reflect.getPrototypeOf([]) // [constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。